﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ferreteria.Forms
{
    public partial class frmModificarStock : Form
    {
        Articulos Art;
        DisancoEntities context;
        DataTable dtModifStock;
        int ID;

        public frmModificarStock(int Id)
        {
            InitializeComponent();
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            cmbMotivo.SelectedIndex = 0;
            ID = Id;
            
            Creargrilla();
            CargarGrillastock();
        }

       private void Creargrilla()
        {
            dtModifStock = new DataTable();
            dtModifStock.Columns.Add("Fecha");
            dtModifStock.Columns.Add("Motivo");
            dtModifStock.Columns.Add("Cantidad");
            dtModifStock.Columns.Add("Descripcion");
        }

       private void CargarGrillastock()
        {
            dtModifStock.Rows.Clear();

            Art = context.Articulos.FirstOrDefault(a => a.art_id == ID);
            txtbNombreArt.Text = Art.art_nombre;
            txtbStockActual.Text = Convert.ToString(Art.art_stock);
 
           foreach (var cambios in context.CambiosStock)
            {
                if (cambios.art_id == Art.art_id)
                {
                    DataRow fila = dtModifStock.NewRow();
                    fila["Fecha"] = cambios.cambio_fecha.Date.ToShortDateString();
                    fila["Motivo"] = cambios.cambio_tipo;
                    fila["Cantidad"] = cambios.cambio_stock;
                    fila["Descripcion"] = cambios.cambio_desc;
                    dtModifStock.Rows.Add(fila);
                }
            
            }
            dgvModificacionStock.DataSource = dtModifStock;
            dgvModificacionStock.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvModificacionStock.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvModificacionStock.Columns["Motivo"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvModificacionStock.Columns["Descripcion"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
       }
        
       
       private void NumUpDcantidad_ValueChanged(object sender, EventArgs e)
        {
            btnGuardar.Enabled = true;
        }

       private void cmbMotivo_SelectedIndexChanged(object sender, EventArgs e)
        {
            NumUpDcantidad.Enabled = true;
        }

       private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                   int stock_actual = Art.art_stock;
                   int stock_adicional = Convert.ToInt32(NumUpDcantidad.Value);
                   
                       DialogResult resultado = MessageBox.Show("¿Esta Seguro de Registrar este Cambio?", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Question);

                       if (resultado == DialogResult.OK)
                       {

                           string motivo = cmbMotivo.SelectedItem.ToString();

                           switch (motivo)
                           {
                               case "Rotura":
                                   {
                                       stock_adicional = -(Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Perdida":
                                   {
                                       stock_adicional = -(Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Robo":
                                   {
                                       stock_adicional = -(Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Descarte":
                                   {
                                       stock_adicional = -(Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Venta sin Sistema":
                                   {
                                       stock_adicional = -(Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Reacondicionamiento":
                                   {
                                       stock_adicional = (Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Devolución":
                                   {
                                       stock_adicional = (Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Otro +":
                                   {
                                       stock_adicional = (Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               case "Otro -":
                                   {
                                       stock_adicional = -(Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                               default:
                                   {
                                       stock_adicional = (Convert.ToInt32(NumUpDcantidad.Value));
                                       break;
                                   }
                           }


                           if ((stock_actual + stock_adicional) < 1)
                           {
                               MessageBox.Show("Imposible realizar este cambio, dejará stock en NEGATIVO", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Question);
                               Limpiar();
                           }
                           else
                           {
                               CambiosStock Cambio = new CambiosStock();
                               Cambio.art_id = Art.art_id;
                               Cambio.cambio_fecha = dtpFechaCambio.Value;
                               Cambio.cambio_desc = txtbDescripcion.Text;
                               Cambio.cambio_tipo = (string)cmbMotivo.SelectedItem;
                               Cambio.cambio_stock = stock_adicional;
                               Cambio.cambio_stockad = 0;
                               Art.art_stock = Art.art_stock + stock_adicional;

                               context.AddToCambiosStock(Cambio);
                               context.SaveChanges();

                               MessageBox.Show("Cambios Guardados con Exito", "Operación Exitosa:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                               CargarGrillastock();
                               Limpiar();
                           }                       
                   }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

       private void Limpiar()
       {
           txtbDescripcion.Text = "";
           NumUpDcantidad.Value = 1;
           cmbMotivo.SelectedIndex = 0;
       }

       private void btnCerrar_Click(object sender, EventArgs e)
       {
           this.Close();
       }
    }
}
